package 字符串;


/**
 * 字符串相加
 */
public class likou43 {

    public String multiply(String num1, String num2) {
        char[] s = new StringBuffer(num1).reverse().toString().toCharArray();
        char[] t = new StringBuffer(num2).reverse().toString().toCharArray();
        int m = num1.length(), n = num2.length();
        int[] tmp = new int[m + n - 1]; // 减不减一都可以

        // 1. 无进位相乘相加
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                // tmp[i + j] = (s[i] - '0') * (t[j] - '0');
                // 注意是相加
                tmp[i + j] += (s[i] - '0') * (t[j] - '0');
            }
        }

        // 2. 处理进位
        int t1 = 0; // 进位
        StringBuffer ret = new StringBuffer();
        for(int x : tmp) {
            t1 += x;
            ret.append((char)(t1 % 10 + '0'));
            t1 /= 10;
        }

        // todo 还要处理剩下的一个进位
        while(t1 != 0) {
            ret.append((char)(t1 % 10 + '0'));
            t1 /= 10;
        }

        // 3. 处理前导0. 因为这个时候还没有翻转, 所以直接判断最后一个位置是不是 0
        // 同时要保证有一个 0. 也就是长度大于1
        // int len = ret.length(); 注意这个len 是会变得, 所以不能提取出来. 提取出来就是固定的了
        // while(len > 1 && ret.charAt(len - 1) == '0') {
        while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0') {
            ret.deleteCharAt(ret.length() - 1);
        }
        // 翻转结果
        return ret.reverse().toString();
    }

}
